package com.atxiaodei.springbootrabbitmqfanoutconsumer.service.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName DirectRabbitConfig
 * @Deacription TODO
 * @Author 王盟
 * @Date 2021/3/23 15:18
 * @Version 1.0
 **/
@Configuration
public class RabbitMqDirectConfig {

    //1、声明注册direct模式的交换机
    @Bean
    public DirectExchange directExchange(){
        // 参数1：交换机名称，参数2：是否持久化 参数3：是否自动删除

        // durable:是否持久化,默认是false,持久化队列：会被存储在磁盘上，当消息代理重启时仍然存在，暂存队列：当前连接有效
        // exclusive:默认也是false，只能被当前创建的连接使用，而且当连接关闭后队列即被删除。此参考优先级高于durable
        // autoDelete:是否自动删除，当没有生产者或者消费者使用此队列，该队列会自动删除。

        return new DirectExchange("direct_order_exchange",true,false);
    }
    //2、声明队列 sms.direct.queue email.direct.queue duanxin.direct.queue
    @Bean
    public Queue smsDirectQueue(){

        //一般设置一下队列的持久化就好,其余两个就是默认false
        return new Queue("sms.direct.queue",true);
    }
    @Bean
    public Queue emailDirectQueue(){
        return new Queue("email.direct.queue",true);
    }
    @Bean
    public Queue duanxinDirectQueue(){
        return new Queue("duanxin.direct.queue",true);
    }

    //3、完成绑定关系（队列和交换机完成绑定关系）
    @Bean
    public Binding smsDirectBinding(){
        return BindingBuilder.bind(smsDirectQueue()).to(directExchange()).with("sms");// 短信队列与交换机绑定
    }

    @Bean
    public Binding emailDirectBinding(){
        return BindingBuilder.bind(emailDirectQueue()).to(directExchange()).with("email");// 邮件队列与交换机绑定
    }

    @Bean
    public Binding duanxinDirectBinding(){
        return BindingBuilder.bind(duanxinDirectQueue()).to(directExchange()).with("duanxin");// 短信队列与交换机绑定
    }

}
